<?php

namespace App\Http\Service;

class AdaPayService
{
    // 用于标记是否已经初始化AdaPay SDK，避免重复初始化
    public static bool $isInit = false;

    /**
     * 初始化AdaPay SDK
     * 如果尚未初始化，则调用AdaPay的init方法进行初始化
     */
    public static function init()
    {
        if (!self::$isInit) {
            // 初始化AdaPay SDK，使用配置文件中的'adapay'配置，测试环境，开启日志记录
            \AdaPay\AdaPay::init(config('adapay'), "test", true);
            // 标记为已初始化
            self::$isInit = true;
        }
    }

    /**
     * 获取AdaPay的应用ID
     * 从环境变量中获取应用ID，如果环境变量未设置，则使用默认值
     * @return string AdaPay的应用ID
     */
    public static function getAppId()
    {
        return env('ADA_PAY_APP_ID', 'app_1fbc5cf1-5a13-4273-ae88-fa59ecc03a1b');
    }

    /**
     * 获取AdaPay的支付对象
     * 在获取支付对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\Payment 支付对象
     */
    public static function getPayment()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回支付对象
        return new \AdaPaySdk\Payment();
    }

    /**
     * 获取AdaPay的会员对象
     * 在获取会员对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\Member 会员对象
     */
    public static function getMember()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回会员对象
        return new \AdaPaySdk\Member();
    }

    /**
     * 获取AdaPay的结算账户对象
     * 在获取结算账户对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\SettleAccount 结算账户对象
     */
    public static function getSettleAccount()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回结算账户对象
        return new \AdaPaySdk\SettleAccount();
    }

    /**
     * 获取AdaPay的提现对象
     * 在获取提现对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\Drawcash 提现对象
     */
    public static function getDrawCash()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回提现对象
        return new \AdaPaySdk\Drawcash();
    }

    /**
     * 获取AdaPay的通用对象
     * 在获取通用对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\AdaPayCommon 通用对象
     */
    public static function getAdapayCommon()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回通用对象
        return new \AdaPaySdk\AdaPayCommon();
    }

    /**
     * 获取AdaPay的退款对象
     * 在获取退款对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\refund 退款对象
     */
    public static function refund()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回退款对象
        return new \AdaPaySdk\refund();
    }

    /**
     * 获取AdaPay的企业会员对象
     * 在获取企业会员对象之前，确保AdaPay SDK已经初始化
     * @return \AdaPaySdk\CorpMember 企业会员对象
     */
    public static function Corp()
    {
        // 调用初始化方法
        self::init();
        // 创建并返回企业会员对象
        return new \AdaPaySdk\CorpMember();
    }
}
